home *** CD-ROM | disk | FTP | other *** search
/ 3D Games - Real-time Rend…ng & Software Technology / 3D Games - Real-time Rendering & Software Technology.iso / flysdk / plugin / gamelib / sound.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2001-02-26  |  2.1 KB  |  119 lines

  1. #include "..\..\lib\Fly3D.h"
  2. #include "gamelib.h"
  3.  
  4. void dyn_sound::play()
  5. {
  6.     if (instance!=-1)
  7.         snd->buf[instance]->Play(0,0,loop?DSBPLAY_LOOPING:0);
  8. }
  9.  
  10. dyn_sound::dyn_sound()
  11. {
  12.     type=TYPE_SOUND;
  13.     lockpos=0;
  14.     lockvel=0;
  15.     snd=0;
  16.     mindist=maxdist=0;
  17.     volume=0;
  18.     instance=-1;
  19. }
  20.  
  21. dyn_sound::~dyn_sound()
  22. {
  23.     if (instance!=-1 && snd)
  24.         snd->free_sound_instance(instance);
  25. }
  26.  
  27. bsp_object *dyn_sound::clone()
  28. {
  29.     dyn_sound *s=new dyn_sound;
  30.  
  31.     *s=*this;
  32.     s->source=this;
  33.  
  34.     if (snd)
  35.         s->instance=snd->get_sound_instace();
  36.  
  37.     return s;
  38. }
  39.  
  40. int dyn_sound::step(int dt)
  41. {
  42.     int ret=0;
  43.     life-=dt;
  44.     if (instance!=-1 && snd->buf3d[instance])
  45.     if (lockpos!=0 || dt==0)
  46.     {
  47.         if (lockpos) 
  48.         {
  49.             pos=*lockpos;
  50.             ret=1;
  51.             snd->buf3d[instance]->SetPosition(pos.x,pos.y,pos.z,DS3D_DEFERRED);
  52.         }
  53.  
  54.         if (lockvel) 
  55.         {
  56.             vel=*lockvel;
  57.             snd->buf3d[instance]->SetVelocity(vel.x,vel.y,vel.z,DS3D_DEFERRED);
  58.         }
  59.         else 
  60.             lockpos=0;
  61.  
  62.         if (dt==0)
  63.             {
  64.             snd->buf3d[instance]->SetMinDistance(mindist,DS3D_DEFERRED);
  65.             snd->buf3d[instance]->SetMaxDistance(maxdist,DS3D_DEFERRED);
  66.             snd->buf[instance]->SetVolume(volume);
  67.             snd->buf[instance]->Play(0,0,loop?DSBPLAY_LOOPING:0);
  68.             }
  69.     }
  70.     return ret;
  71. }
  72.  
  73. int dyn_sound::get_custom_param_desc(int i,param_desc *pd)
  74. {
  75.     if (pd!=0)
  76.     switch(i)
  77.     {
  78.         case 0:
  79.             pd->type='f';
  80.             pd->data=&mindist;
  81.             strcpy(pd->name,"mindist");
  82.             break;
  83.         case 1:
  84.             pd->type='f';
  85.             pd->data=&maxdist;
  86.             strcpy(pd->name,"maxdist");
  87.             break;
  88.         case 2:
  89.             pd->type='i';
  90.             pd->data=&volume;
  91.             strcpy(pd->name,"volume");
  92.             break;
  93.         case 3:
  94.             pd->type='i';
  95.             pd->data=&loop;
  96.             strcpy(pd->name,"loop");
  97.             break;
  98.         case 4:
  99.             pd->type='w';
  100.             pd->data=&snd;
  101.             strcpy(pd->name,"file");
  102.             break;
  103.     }
  104.     return 5;
  105. }
  106.  
  107. void dyn_sound::add_sound_clone(vector *lock_pos,vector *lock_vel)
  108. {
  109.     if (flyengine->mute==0 && directx->mpmode!=FLYMP_SERVER && snd)
  110.     {
  111.         dyn_sound *s=(dyn_sound *)clone();
  112.         s->life=snd->total_time;
  113.         s->lockpos=lock_pos;
  114.         s->lockvel=lock_vel;
  115.         s->step(0);
  116.         flyengine->activate(s);
  117.     }
  118. }
  119.